package cn.org.july.weixin.common.bean;

import lombok.Getter;

import java.io.Serializable;
import java.util.HashMap;

/**
 * 获取授权Token对象Bean
 *
 * @auther: wanghongjie
 * @blame: wanghongjie
 * @date: 2020-08-30 10:11
 * @Description:
 */
@Getter
public class AccessTokenBean implements Serializable {
    /**
     * 固定值：获取access_token填写client_credential
     */
    private String grantType = "client_credential";
    /**
     * 第三方用户唯一凭证
     */
    private String appId;
    /**
     * 第三方用户唯一凭证密钥，即appSecret
     */
    private String secret;
    /**
     * 获取到的凭证
     */
    private String accessToken;
    /**
     * 凭证过期时间
     */
    private long expiresTime;

    private AccessTokenBean(String appId, String secret, String accessToken, String expiresIn) {
        this.appId = appId;
        this.secret = secret;
        this.accessToken = accessToken;
        if (!"".equals(expiresIn)) {
            this.expiresTime = System.currentTimeMillis() + Integer.valueOf(expiresIn) * 1000;
        }
    }

    /**
     * 获取access_token请求对象
     *
     * @param appId  第三方用户唯一凭证
     * @param secret 第三方用户唯一凭证密钥，即appSecret
     * @return
     */
    public static HashMap<String, String> requestOf(String appId, String secret) {
        HashMap<String, String> param = new HashMap<>(16);
        param.put("grant_type", "client_credential");
        param.put("appid", appId);
        param.put("secret", secret);
        return param;
    }

    /**
     * 获取access_token响应对象
     *
     * @param accessToken 获取到的凭证
     * @param expiresIn   凭证有效时间，单位：秒
     * @return
     */
    public static AccessTokenBean responseOf(String accessToken, String expiresIn) {
        return new AccessTokenBean("", "", accessToken, expiresIn);
    }

    /**
     * 判断access_token 是否过期
     *
     * @return 是否过期 true 标示已过期
     */
    public boolean isExpired() {
        return System.currentTimeMillis() > expiresTime;
    }
}
